package com.wx.sftp.config;

import com.alibaba.fastjson.JSON;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 */
@Data
@Component
@ConfigurationProperties(prefix = "saas.sftp")
public class SaasFtpConf {
  /**
   * 服务器地址
   */
  private String host;
  /**
   * 端口号
   */
  private int port;
  /**
   * 用户名
   */
  private String userName;
  /**
   * 密码
   */
  private String password;
  /**
   * 访问域名 -> https://fileserver_smartbuilding.ctwing.cn
   */
  private String domain;

  private String convertUrl;

  private String synchronizedUrl;

  private String videoDomain;
  /**
   * 文件存储的基础路径 -> /home/webapp/static
   * 这是nginx配置的server根目录
   */
  private String baseDir = "/home/webapp/static";
  /**
   * 第二存储路径,同baseDir一起构成文件上传的基础路径
   * 如开发环境/dev,测试环境/test,生产环境/prd
   * 例如开发环境的图片都存储在/home/webapp/static/dev路径下
   */
  private String secDir = "";

  private PoolConfig pool = new PoolConfig();

  @Override
  public String toString() {
    return JSON.toJSONString(this);
  }


  @Getter
  @Setter
  public static class PoolConfig {
    /**
     * 最大资源数
     */
    private int maxTotal = 8;
    /**
     * 最大空闲数
     */
    private int maxIdle = 8;
    /**
     * 最小空闲数
     */
    private int minIdle = 1;
    /**
     * 当没有空闲连接时，获取一个对象的最大等待时间。
     * 如果这个值小于0，则永不超时，一直等待，直到有空闲对象到来。如果大于0，则等待maxWaitMillis长时间，
     * 如果没有空闲对象，将抛出NoSuchElementException异常。
     */
    private long maxWaitMillis = -1L;
    /**
     * 对象最小的空闲时间。
     * 如果为小于等于0，最Long的最大值，如果大于0，当空闲的时间大于这个值时，执行移除这个对象操作。
     * 默认值是1000L * 60L * 30L;即30分钟。这个参数是强制性的，只要空闲时间超过这个值，就会移除。
     */
    private long minEvictableIdleTimeMillis = 1000L * 60L * 30L;
    /**
     * 在创建对象时检测对象是否有效
     */
    private boolean testOnCreate = false;
    /**
     * 在从对象池获取对象时是否检测对象有效
     */
    private boolean testOnBorrow = false;
    /**
     * 在向对象池中归还对象时是否检测对象有效
     */
    private boolean testOnReturn = true;
    /**
     * 在检测空闲对象线程检测到对象不需要移除时，是否检测对象的有效性
     */
    private boolean testWhileIdle = false;
    /**
     * 空闲对象检测线程的执行周期，即多长时候执行一次空闲对象检测。单位是毫秒数。如果小于等于0，则不执行检测线程。
     */
    private long timeBetweenEvictionRunsMillis = -1;

    @Override
    public String toString() {
      return JSON.toJSONString(this);
    }
  }
}
